package com.hsh.graph 
{
	import flash.events.Event;
	/**
	 * Aspect d'un Visuel
	 * @author Jean-Marie@home
	 */
	public class Style 
	{
		private var _visuels:Vector.<Visuel> = new Vector.<Visuel>;
		private var _val:Vector.<Number> = new Vector.<Number>(14, true);
		
		/**
		 * Aspect d'un Visuel
		 * @param	f	couleur du fond
		 * @param	b	couleur du bord
		 * @param	d	couleur du dégradé
		 * @param	t	couleur du texte
		 * @param	s	couleur du fond survolé
		 * @param	e	couleur du fond enfoncé
		 * @param	r	couleur du fond relâché
		 * @param	i	couleur du fond inerte
		 * @param	af	alpha de la couleur de fond
		 * @param	ab	alpha de la couleur de bordure
		 * @param	ad	alpha de la couleur de dégradé
		 * @param	eb	épaisseur de la bordure
		 * @param	angl	angle du dégradé en degrés
		 */
		public function Style(f:int = 0xffffff, b:int = 0x000000, d:int = -1, t:int = 0, s:int = 0xccccff, e:int=0xff99ff, r:int=0xcc66cc, i:int=0x666666, af:Number = 1.0, ab:Number = 1.0, ad:Number=1.0, eb:Number=2.0, angl:Number=90) 
		{
			colorier(f, b, d, t, s, e, r, i);
			decorer(af, ab, ad, eb, angl);
		}
		
		/**
		 * Modifie l'un des paramètres
		 * @param	index	index du paramètre à modifier
		 * @param	altVal	nouvelle valeur 
		 */
		private function _changer(index:uint, altVal:Number):void
		{
			if (_val[index] != altVal)
			{
				_val[index] = altVal; 
				_modifier();
			}
		}
		
		/**
		 * Force le dessin de chaque visuel
		 * @param	e	événement provoquant la mise à jour
		 */
		private function _modifier(e:Event = null):void
		{
			for each (var v:Visuel in _visuels) 
			{
				v.actualiser();
			}
		}
		
		/**
		 * Décoration
		 * @param	af	alpha de la couleur de fond
		 * @param	ab	alpha de la couleur de bordure
		 * @param	ad	alpha de la couleur de dégradé
		 * @param	eb	épaisseur de la bordure
		 * @param	angl	angle du dégradé en degrés
		 */
		public function decorer(af:Number = 1.0, ab:Number = 1.0, ad:Number=1.0, eb:Number=2.0, angl:Number=90):void
		{
			alphaFond = af;
			alphaBord = ab;
			alphaDegrade = ad;
			epaisseur = eb;
			angleDegr = angl;			
		}
		
		/**
		 * Couleurs
		 * @param	f	couleur du fond
		 * @param	b	couleur du bord
		 * @param	d	couleur du dégradé
		 * @param	t	couleur du texte
		 * @param	s	couleur du fond survolé
		 * @param	e	couleur du fond enfoncé
		 * @param	r	couleur du fond relâché
		 * @param	i	couleur du fond inerte
		 */
		public function colorier(f:int = 0xffffff, b:int = 0x000000, d:int = -1, t:int = 0, s:int = 0xccccff, e:int=0xff99ff, r:int=0xcc66cc, i:int=0x666666):void 
		{
			coulFond = f;
			coulBord = b;
			coulDegr = d;
			coulTexte = t;
			coulSurvol = s;
			coulEnfonce = e;
			coulRelache = r;
			coulInerte = i;
		}
		
		/**
		 * Gère les couleurs et le style d'un visuel 
		 * @param	v
		 */
		public function ajouter(v:Visuel):void
		{
			if (_visuels.indexOf(v) == -1)
			{
				_visuels.push(v);
			}
		}
		
		/**
		 * Ne gère plus les couleurs et le style d'un visuel
		 * @param	v
		 */
		public function enlever(v:Visuel):void
		{
			if (_visuels.indexOf(v) > -1)
			{
				_visuels.splice(_visuels.indexOf(v), 1);
			}
		}

		/**
		 * Couleur d'arrière-plan normale
		 */
		public function get coulFond():int 
		{
			return _val[0];
		}
		
		public function set coulFond(value:int):void 
		{
			_changer(0, value);
		}
		
		/**
		 * Couleur de bordure
		 */
		public function get coulBord():int 
		{
			return _val[1];
		}
		
		public function set coulBord(value:int):void 
		{
			_changer(1, value);
		}
		/**
		 * Couleur du dégradé
		 */
		public function get coulDegr():int 
		{
			return _val[2];
		}
		
		public function set coulDegr(value:int):void 
		{
			_changer(2, value);
		}
		
		/**
		 * Couleur du texte
		 */
		public function get coulTexte():int 
		{
			return _val[3];
		}
		
		public function set coulTexte(value:int):void 
		{
			_changer(3, value);
		}
		
		/**
		 * Couleur du fond survolé
		 */
		public function get coulSurvol():int 
		{
			return _val[4];
		}
		
		public function set coulSurvol(value:int):void 
		{
			_changer(4, value);
		}
		
		/**
		 * Couleur du fond enfoncé
		 */
		public function get coulEnfonce():int 
		{
			return _val[5];
		}
		
		public function set coulEnfonce(value:int):void 
		{
			_changer(5, value);
		}
		
		/**
		 * Couleur du fond relâché
		 */
		public function get coulRelache():int 
		{
			return _val[6];
		}
		
		public function set coulRelache(value:int):void 
		{
			_changer(6, value);
		}	
		
		/**
		 * Couleur du fond non réactif
		 */
		public function get coulInerte():int 
		{
			return _val[7];
		}
		
		public function set coulInerte(value:int):void 
		{
			_changer(7, value);
		}
		
		/**
		 * Alpha d'arrière-plan normale
		 */
		public function get alphaFond():Number 
		{
			return _val[8];
		}
		
		public function set alphaFond(value:Number):void 
		{
			_changer(8, value);
		}
		
		/**
		 * Alpha de bordure
		 */
		public function get alphaBord():Number 
		{
			return _val[9];
		}
		
		public function set alphaBord(value:Number):void 
		{
			_changer(9, value);
		}
		/**
		 * Alpha du dégradé
		 */
		public function get alphaDegrade():Number 
		{
			return _val[10];
		}
		
		public function set alphaDegrade(value:Number):void 
		{
			_changer(10, value);
		}
		
		/**
		 * Alpha du texte
		 */
		public function get alphaTexte():Number 
		{
			return _val[11];
		}
		
		public function set alphaTexte(value:Number):void 
		{
			_changer(11, value);
		}
		
		/**
		 * Épaisseur de la bordure
		 */
		public function get epaisseur():Number 
		{
			return _val[12];
		}
		
		public function set epaisseur(value:Number):void 
		{
			_changer(12, value);
		}
		
		/**
		 * Orientation du dégradé en degrés
		 */
		public function get angleDegr():Number 
		{
			return _val[13];
		}
		
		public function set angleDegr(value:Number):void 
		{
			_changer(13, value);
		}
	}
}